//package com.hydra.auth.utils;
//
//import com.hydra.base.common.Constant;
//import com.hydra.base.utils.StringUtil;
//import com.hydra.base.utils.WebUtil;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import lombok.extern.slf4j.Slf4j;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.Date;
//import java.util.Map;
//import java.util.function.Function;
//
///**
// * JwtTokenUtil 工具类
// * @Author Hydra
// * @Date 2022/4/18 11:18
// */
//@Slf4j
//public class TokenUtil {
//
//    /**密钥*/
//    protected static final String secret = "hydra_cym_123456789";
//
//    public static String getToken(){
//        HttpServletRequest request = WebUtil.getRequest();
//        // 获取请求头里面的Authorization
//        String requestTokenHeader = request.getHeader("Authorization");
//        if(requestTokenHeader != null){
//            if (requestTokenHeader.startsWith("Bearer ")) {
//                return requestTokenHeader.substring(7);
//            } else {
//                log.error("JWT Token does not begin with Bearer String");
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 从token里面获取用户名
//     */
//    public static String getUsernameFromToken(String token) {
//        return getClaimFromToken(token, Claims::getSubject);
//    }
//
//    /**
//     * 从token里面获取用户code
//     */
//    public static String getUserCodeFromToken(String token) {
//        return getClaimFromToken(token, Claims::getId);
//    }
//
//    /**
//     * 从token里面获取过期时间
//     */
//    public static Date getExpirationDateFromToken(String token) {
//        return getClaimFromToken(token, Claims::getExpiration);
//    }
//
//    /**
//     * 从token里面获取对象
//     * @param token             token
//     * @param claimsResolver    函数接口，如：Claims::getSubject
//     * @return  claims集合对象(其实就是个map)
//     */
//    public static <T> T getClaimFromToken(String token, Function<Claims, T> claimsResolver) {
//        Claims claims = getAllClaimsFromToken(token);
//        return claimsResolver.apply(claims);
//    }
//
//    /**
//     * 从token中获取所有集合参数
//     */
//    private static Claims getAllClaimsFromToken(String token) {
//        return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();
//    }
//
//    /**
//     * 判断token是否过期
//     */
//    public static Boolean isTokenExpired(String token) {
//        if(StringUtil.isBlank(token)){
//            return false;
//        }
//        Date expiration = getExpirationDateFromToken(token);
//        return expiration.before(new Date());
//    }
//
//    /**
//     * 生成token
//     */
//    protected static String doGenerateToken(Map<String, Object> claims, String code, String subject) {
//        return Jwts.builder()
//                .setClaims(claims)
//                .setId(code)
//                .setSubject(subject)
//                .setIssuedAt(new Date(System.currentTimeMillis()))
//                .setExpiration(new Date(System.currentTimeMillis() + Constant.JWT_TOKEN_VALIDITY*1000))
//                .signWith(SignatureAlgorithm.HS512, secret)
//                .compact();
//    }
//
//}